package com.renyq.algorithm.doublePointer

/**
 * 输入一个正整数组成的数组和一个正整数k，请问数组中和大于或等于k的连续子数组的最短长度是多少？如果不存在所有数字之和大于或等于k的子数组，则返回0。
 * 例如，输入数组[5，1，4，3]，k的值为7，和大于或等于7的最短连续子数组是[4，3]，因此输出它的长度2。
 * @author renyongqiang
 * @since 2021/10/17
 */
class ShortestArray {
    fun shortestSubArray(arrays: IntArray, targetNumber: Int): Int {
        var left = 0
        var right = 0
        var minSum = Int.MAX_VALUE
        while (left <= right && right < arrays.size) {
            var sum = 0
            for (i in left.rangeTo(right)) sum += arrays[i]
            when {
                sum >= targetNumber -> {
                    val length = right - left + 1
                    if (length < minSum) minSum = length
                    left++
                }
                else -> {
                    right++
                }
            }
        }
        return minSum
    }
}

fun main() {
    val arrays = intArrayOf(5, 1, 4, 3)
    val targetNumber = 7
    val shortestArray = ShortestArray()
    val result = shortestArray.shortestSubArray(arrays, targetNumber)
    print(result)
}